package com.itdl.util;

import lombok.Builder;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;

/**
 * @author: itdl
 * @date: 2022/3/7 14:03
 * @description: 定义通用返回结果
 * @version: 1.0
 */
@Data
@Builder
@ToString
public class R<T> implements Serializable {
    /**
     * 系统是否处理成功 true成功 false失败
     */
    private boolean success;

    /**
     * 业务处理是否成功，true成功， false业务处理失败
     */
    private boolean executed;

    /**
     * 处理结果编码
     */
    private String code;

    /**
     * 处理结果消息
     */
    private String message;

    /**
     * 处理结果携带的数据
     */
    private T data;

    /**
     * 功能描述: 构建成功结果
     */
    public static R success() {
        return R.builder()
                .success(true)
                .executed(true)
                .code("200")
                .message("success")
                .build();
    }

    /**
     * 功能描述: 构建成功结果, 携带返回数据
     */
    public static <T>R success(T data) {
        return R.builder()
                .success(true)
                .executed(true)
                .code("200")
                .message("success")
                .data(data)
                .build();
    }

    /**
     * 功能描述: 构建成功结果, 指定code和message
     */
    public static R success(String code, String message) {
        return R.builder()
                .success(true)
                .executed(true)
                .code(code)
                .message(message)
                .build();
    }

    /**
     * 功能描述: 构建成功结果, 指定code和message和data
     */
    public static <T>R success(String code, String message, T data) {
        return R.builder()
                .success(true)
                .executed(true)
                .code(code)
                .message(message)
                .data(data)
                .build();
    }


    /**
     * 功能描述: 构建失败结果, 指定code和message
     */
    public static R error(String code, String message) {
        return R.builder()
                .success(false)
                .executed(false)
                .code(code)
                .message(message)
                .build();
    }


    /**
     * 功能描述: 构建失败结果, 指定code和message
     */
    public static <T>R error(String code, String message, T data) {
        return R.builder()
                .success(false)
                .executed(false)
                .code(code)
                .message(message)
                .data(data)
                .build();
    }
}
